#pragma once

// CheckingPolicy

#include <cassert>
#include "NoCheck.h"

template <class P>	// StoredType
class AssertCheck
{
public:

	AssertCheck()
	{
	}

	template <class P1>
	AssertCheck(const AssertCheck<P1>& rhs)
	{
	}

	// Conversion from NoCheck is allowed (safer)
	template <class P1>
	AssertCheck(const NoCheck<P1>& rhs)
	{
	}

	static void OnDefault(const P&)
	{
	}

	static void OnInit(const P&)
	{
	}

	static void OnDereference(const P& iVal)
	{
		assert(iVal || "Attempt to dereference a null pointer");
	}

	static void Swap(AssertCheck&)
	{
	}
};